home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / biz / haage / WarpUP_V31.lha / WarpUP-WarpOS / include / powerpc / ppcmacros.i < prev    next >
Text File  |  1998-03-06  |  9KB  |  518 lines

  1.         IFND    POWERPC_PPCMACROS_I
  2. POWERPC_PPCMACROS_I     set     1
  3.  
  4. **
  5. **      $VER: PPCmacros.i 8.0 (3.6.97)
  6. **
  7. **      standard macros and definitions for PowerPC
  8. **
  9.  
  10. BITDEFPPC       macro
  11. \1P_\2          =       \3
  12. \1B_\2          =       31-(\3)
  13. \1F_\2          =       1<<(31-(\3))
  14.         endm
  15.  
  16. ALLOCPPCMEM     macro
  17.         movem.l d1/a0/a1/a6,-(sp)
  18.         move.l  _SysBase,a6
  19.         add.l   #56,d0
  20.         jsr     -684(a6)                ;AllocVec
  21.         move.l  d0,d1
  22.         beq     .zero\@
  23.         add.l   #39,d0
  24.         and.l   #$ffffffe0,d0
  25.         move.l  d0,a0
  26.         move.l  d1,-4(a0)
  27. .zero\@
  28.         movem.l (sp)+,d1/a0/a1/a6
  29.         endm
  30.  
  31. FREEPPCMEM      macro
  32.         movem.l d0/d1/a0/a1/a6,-(sp)
  33.         move.l  a1,d0
  34.         beq.b   .nofree\@
  35.         move.l  -4(a1),a1
  36.         move.l  _SysBase,a6
  37.         jsr     -690(a6)                ;FreeVec
  38. .nofree\@
  39.         movem.l (sp)+,d0/d1/a0/a1/a6
  40.         endm
  41.  
  42.         IFD     _POWERMODE
  43.  
  44.         IFND    __LOCALSIZE
  45. __LOCALSIZE     set     1024
  46.         ENDC
  47.         IFND    local
  48. __LOCAL         setr    r13
  49. local           setr    r13
  50.         ENDC
  51. base            equr    r2
  52. stack           equr    r1
  53. trash           equr    r0
  54.  
  55. **** these register symbols can be used when transferring parameters from
  56. **** 68K to PPC and vice versa
  57.  
  58. _d0             equr    r3
  59. _d1             equr    r4
  60. _d2             equr    r22
  61. _d3             equr    r23
  62. _d4             equr    r24
  63. _d5             equr    r25
  64. _d6             equr    r26
  65. _d7             equr    r27
  66. _a0             equr    r5
  67. _a1             equr    r6
  68. _a2             equr    r28
  69. _a3             equr    r29
  70. _a4             equr    base
  71. _a5             equr    r30
  72. _a6             equr    r31
  73.  
  74. _fp0            fequr   f1
  75. _fp1            fequr   f2
  76. _fp2            fequr   f3
  77. _fp3            fequr   f4
  78. _fp4            fequr   f5
  79. _fp5            fequr   f6
  80. _fp6            fequr   f7
  81. _fp7            fequr   f8
  82.  
  83. lw              macro
  84.             IFEQ    __MODE-__NEAR
  85.                 lwz     \1,\2(base)
  86.             ELSEIF
  87.                 la      \1,\2
  88.                 lwz     \1,0(\1)
  89.             ENDC
  90.         endm
  91.  
  92. lh              macro
  93.             IFEQ    __MODE-__NEAR
  94.                 lhz     \1,\2(base)
  95.             ELSEIF
  96.                 la      \1,\2
  97.                 lhz     \1,0(\1)
  98.             ENDC
  99.         endm
  100.  
  101. lhs             macro
  102.             IFEQ    __MODE-__NEAR
  103.                 lha     \1,\2(base)
  104.             ELSEIF
  105.                 la      \1,\2
  106.                 lha     \1,0(\1)
  107.             ENDC
  108.         endm
  109.  
  110. lb              macro
  111.             IFEQ    __MODE-__NEAR
  112.                 lbz     \1,\2(base)
  113.             ELSEIF
  114.                 la      \1,\2
  115.                 lbz     \1,0(\1)
  116.             ENDC
  117.         endm
  118.  
  119. lbs             macro
  120.             IFEQ    __MODE-__NEAR
  121.                 lbz     \1,\2(base)
  122.                 extsb   \1,\1
  123.             ELSEIF
  124.                 la      \1,\2
  125.                 lbz     \1,0(\1)
  126.                 extsb   \1,\1
  127.             ENDC
  128.         endm
  129.  
  130. lf              macro
  131.             IFEQ    __MODE-__NEAR
  132.                 lfd     \1,\2(base)
  133.             ELSEIF
  134.                 mr      trash,r3
  135.                 la      r3,\2
  136.                 lfd     \1,0(r3)
  137.                 mr      r3,trash
  138.             ENDC
  139.         endm
  140.  
  141. ls              macro
  142.             IFEQ    __MODE-__NEAR
  143.                 lfs     \1,\2(base)
  144.             ELSEIF
  145.                 mr      trash,r3
  146.                 la      r3,\2
  147.                 lfs     \1,0(r3)
  148.                 mr      r3,trash
  149.             ENDC
  150.         endm
  151.  
  152. sw              macro
  153.             IFEQ    __MODE-__NEAR
  154.                 stw     \1,\2(base)
  155.             ELSEIF
  156.                 mr      trash,\1
  157.                 la      \1,\2
  158.                 stw     trash,0(\1)
  159.                 mr      \1,trash
  160.             ENDC
  161.         endm
  162.  
  163. sh              macro
  164.             IFEQ    __MODE-__NEAR
  165.                 sth     \1,\2(base)
  166.             ELSEIF
  167.                 mr      trash,\1
  168.                 la      \1,\2
  169.                 sth     trash,0(\1)
  170.                 mr      \1,trash
  171.             ENDC
  172.         endm
  173.  
  174. sb              macro
  175.             IFEQ    __MODE-__NEAR
  176.                 stb     \1,\2(base)
  177.             ELSEIF
  178.                 mr      trash,\1
  179.                 la      \1,\2
  180.                 stb     trash,0(\1)
  181.                 mr      \1,trash
  182.             ENDC
  183.         endm
  184.  
  185. sf              macro
  186.             IFEQ    __MODE-__NEAR
  187.                 stfd    \1,\2(base)
  188.             ELSEIF
  189.                 mr      trash,r3
  190.                 la      r3,\2
  191.                 stfd    \1,0(r3)
  192.                 mr      r3,trash
  193.             ENDC
  194.         endm
  195.  
  196. ss              macro
  197.             IFEQ    __MODE-__NEAR
  198.                 stfs    \1,\2(base)
  199.             ELSEIF
  200.                 mr      trash,r3
  201.                 la      r3,\2
  202.                 stfs    \1,0(r3)
  203.                 mr      r3,trash
  204.             ENDC
  205.         endm
  206.  
  207. lba             macro
  208.         lbz     \1,\2
  209.         extsb   \1,\1
  210.         endm
  211.  
  212. lbau            macro
  213.         lbzu    \1,\2
  214.         extsb   \1,\1
  215.         endm
  216.  
  217. lbax            macro
  218.         lbzx    \1,\2,\3
  219.         extsb   \1,\1
  220.         endm
  221.  
  222. lbaux           macro
  223.         lbzux   \1,\2,\3
  224.         extsb   \1,\1
  225.         endm
  226.  
  227. stwi            macro
  228.         liw     trash,\1
  229.         stw     trash,\2
  230.         endm
  231.  
  232. sthi            macro
  233.         li      trash,\1
  234.         sth     trash,\2
  235.         endm
  236.  
  237. stbi            macro
  238.         li      trash,\1
  239.         stb     trash,\2
  240.         endm
  241.  
  242. stwiu           macro
  243.         liw     trash,\1
  244.         stwu    trash,\2
  245.         endm
  246.  
  247. sthiu           macro
  248.         li      trash,\1
  249.         sthu    trash,\2
  250.         endm
  251.  
  252. stbiu           macro
  253.         li      trash,\1
  254.         stbu    trash,\2
  255.         endm
  256.  
  257. stwix           macro
  258.         liw     trash,\1
  259.         stwx    trash,\2,\3
  260.         endm
  261.  
  262. sthix           macro
  263.         li      trash,\1
  264.         sthx    trash,\2,\3
  265.         endm
  266.  
  267. stbix           macro
  268.         li      trash,\1
  269.         stbx    trash,\2,\3
  270.         endm
  271.  
  272. stwiux          macro
  273.         liw     trash,\1
  274.         stwux   trash,\2,\3
  275.         endm
  276.  
  277. sthiux          macro
  278.         li      trash,\1
  279.         sthux   trash,\2,\3
  280.         endm
  281.  
  282. stbiux          macro
  283.         li      trash,\1
  284.         stbux   trash,\2,\3
  285.         endm
  286.  
  287. swi             macro
  288.             IFEQ    __MODE-__NEAR
  289.                 liw     trash,\1
  290.                 stw     trash,\2(base)
  291.             ELSEIF
  292.                 stw     r3,-4(local)
  293.                 liw     trash,\1
  294.                 la      r3,\2
  295.                 stw     trash,0(r3)
  296.                 lwz     r3,-4(local)
  297.             ENDC
  298.         endm
  299.  
  300. shi             macro
  301.             IFEQ    __MODE-__NEAR
  302.                 li      trash,\1
  303.                 sth     trash,\2(base)
  304.             ELSEIF
  305.                 stw     r3,-4(local)
  306.                 li      trash,\1
  307.                 la      r3,\2
  308.                 sth     trash,0(r3)
  309.                 lwz     r3,-4(local)
  310.             ENDC
  311.         endm
  312.  
  313. sbi             macro
  314.             IFEQ    __MODE-__NEAR
  315.                 li      trash,\1
  316.                 stb     trash,\2(base)
  317.             ELSEIF
  318.                 stw     r3,-4(local)
  319.                 li      trash,\1
  320.                 la      r3,\2
  321.                 stb     trash,0(r3)
  322.                 lwz     r3,-4(local)
  323.             ENDC
  324.         endm
  325.  
  326. liw             macro
  327.         lis     \1,High(\2)
  328.         ori     \1,\1,Low(\2)
  329.         endm
  330.  
  331. clrw            macro
  332.         xor\0   \1,\1,\1
  333.         endm
  334.  
  335. clrh            macro
  336.         clrrwi\0 \1,\1,16
  337.         endm
  338.  
  339. clrb            macro
  340.         clrrwi\0 \1,\1,8
  341.         endm
  342.  
  343. setb            macro
  344.         ori     \1,\1,$ff
  345.         endm
  346.  
  347. seth            macro
  348.         ori     \1,\1,$ffff
  349.         endm
  350.  
  351. setw            macro
  352.         eqv\0   \1,\1,\1
  353.         endm
  354.  
  355. mh              macro
  356.         insrwi\0 \1,\2,16,16
  357.         endm
  358.  
  359. mb              macro
  360.         insrwi\0 \1,\2,8,24
  361.         endm
  362.  
  363. tstb            macro
  364.         extsb.  trash,\1
  365.         endm
  366.  
  367. tsth            macro
  368.         extsh.  trash,\1
  369.         endm
  370.  
  371. tstw            macro
  372.         mr.     \1,\1
  373.         endm
  374.  
  375. bittst          macro
  376.         IFLT    (\2)-31
  377.             extrwi. trash,\1,1,\2
  378.         ELSEIF
  379.             andi.   trash,\1,$1
  380.         ENDC
  381.         endm
  382.  
  383. bitset          macro
  384.         IFLT    (\2)-16
  385.             oris    \1,\1,(1<<(15-(\2)))
  386.         ELSEIF
  387.             ori     \1,\1,(1<<(31-(\2)))
  388.         ENDC
  389.         endm
  390.  
  391. bitclr          macro
  392.         IFLT    (\2)-16
  393.             oris    \1,\1,(1<<(15-(\2)))
  394.             xoris   \1,\1,(1<<(15-(\2)))
  395.         ELSEIF
  396.             ori     \1,\1,(1<<(31-(\2)))
  397.             xori    \1,\1,(1<<(31-(\2)))
  398.         ENDC
  399.         endm
  400.  
  401. bitchg          macro
  402.         IFLT    (\2)-16
  403.             xoris   \1,\1,(1<<(15-(\2)))
  404.         ELSEIF
  405.             xori    \1,\1,(1<<(31-(\2)))
  406.         ENDC
  407.         endm
  408.  
  409. push            macro
  410.         stwu    \1,-4(local)
  411.         endm
  412.  
  413. pushf           macro
  414.         stfdu   \1,-8(local)
  415.         endm
  416.  
  417. pushlr          macro
  418.         mflr    trash
  419.         stwu    trash,-4(local)
  420.         endm
  421.  
  422. pushctr         macro
  423.         mfctr   trash
  424.         stwu    trash,-4(local)
  425.         endm
  426.  
  427. pushcr          macro
  428.         mfcr    trash
  429.         stwu    trash,-4(local)
  430.         endm
  431.  
  432. pop             macro
  433.         lwz     \1,0(local)
  434.         addi    local,local,4
  435.         endm
  436.  
  437. popf            macro
  438.         lfd     \1,0(local)
  439.         addi    local,local,8
  440.         endm
  441.  
  442. poplr           macro
  443.         lwz     trash,0(local)
  444.         addi    local,local,4
  445.         mtlr    trash
  446.         endm
  447.  
  448. popctr          macro
  449.         lwz     trash,0(local)
  450.         addi    local,local,4
  451.         mtctr   trash
  452.         endm
  453.  
  454. popcr           macro
  455.         lwz     trash,0(local)
  456.         addi    local,local,4
  457.         mtcr    trash
  458.         endm
  459.  
  460. lnk             macro
  461.         stwu    \1,-4(local)
  462.         mr      \1,local
  463.         addi    local,local,\2
  464.         endm
  465.  
  466. ulnk            macro
  467.         mr      local,\1
  468.         lwz     \1,0(local)
  469.         addi    local,local,4
  470.         endm
  471.  
  472.  
  473. setlocal        macro
  474. __LOCALSIZE     set     \1
  475. __LOCAL         setr    \2
  476. local           setr    \2
  477.         endm
  478.  
  479. prolog          macro
  480.         IFNC    "","\2"
  481. local           setr    \2
  482. __LOCAL         setr    \2
  483.         ENDC
  484.         IFC     "TOC","\3"
  485.             stw     base,20(stack)
  486.         ENDC
  487.         mflr    trash
  488.         stw     trash,8(stack)
  489.         mfcr    trash
  490.         stw     trash,4(stack)
  491.         stw     local,-4(stack)
  492.         subi    local,stack,4
  493.         IFC     "","\1"
  494. __ARGS          set     24+4+(__LOCALSIZE)+56
  495.             stwu    stack,-((__ARGS)-56)(stack)
  496.         ELSEIF
  497. __ARGS          set     24+4+(\1)+56
  498.             stwu    stack,-((__ARGS)-56)(stack)
  499.         ENDC
  500.         endm
  501.  
  502. epilog          macro
  503.         lwz     stack,0(stack)
  504.         lwz     local,-4(stack)
  505.         lwz     trash,8(stack)
  506.         mtlr    trash
  507.         lwz     trash,4(stack)
  508.         mtcr    trash
  509.         IFC     "TOC","\1"
  510.             lwz     base,20(stack)
  511.         ENDC
  512.         blr
  513.         endm
  514.  
  515.         ENDC
  516.  
  517.         ENDC ; IFND PPCMACROS_I
  518.